package org.jypj.dev.dao;

import org.jypj.dev.model.Thing;
import org.jypj.dev.util.Page;

import java.util.List;
import java.util.Map;

public interface IThingDao {
    
 	/**
	 * 保存    
	 * 字段为空的不存防止覆盖存在默认值的字段
	 * @param thing
	 * @return 保存后的对象包括ID
	 */	
	public int saveThingByField(Thing thing);
	
	/**
	 * 保存    
	 * 所有字段全都保存
	 * @param thing 
	 * @return 保存后的对象包括ID
	 */	
	public int saveThing(Thing thing);
    
    /**
	 * 根据ID删除
	 * @param id 主键ID
	 * @return 删除记录数
	 */	
    public int deleteThingById(String id);
    
   	/**
	 * 根据对象删除
	 * @param thing
	 * @return 
	 */	
    public int deleteThingByObject(Thing thing);
    /**
	 * 更新  
	 * 只更新值不为空的字段
	 * @param thing 
	 * @return 保存后的对象包括ID
	 */	
    public int updateThingByField(Thing thing);
    
    /**
	 * 更新  
	 * 更新所有字段
	 * @param thing 
	 * @return 保存后的对象包括ID
	 */	
    public int updateThing(Thing thing);
    
   /**
	 * 按ID查询
	 * @parm id 主键ID
	 * @return Thing 
	 */	
    public Thing selectThingById(String id);
    
    /**
	 * 分页查询 包含条件
	 * @param page 分页对象
	 * @param map  查询条件  
	 * @return  List<Thing>
	 */	
     public List<Thing> selectOnePageByMap(Page page, Map<String, Object> map);
    /**
	 * 分页查询 包含对象条件
	 * @param page 分页对象
	 * @param thing 查询对象
	 * @return List<Thing>
	 */	
     public List<Thing> selectOnePageByThing(Page page, Thing thing);
    
   /**
	 * 按条件查询全部的
	 * @param map  查询条件  
	 * @return  List<Thing>
	 */	
     public List<Thing> selectAllByMap(Map<String, Object> map);
     
      
   /**
	 * 按条件查询全部的
	 * @param map  查询条件  
	 * @return  List<Thing>
	 */	
     public List<Thing> selectAllByThing(Thing thing);
    
	/**
	 * 按条件查询单个对象
	 * @param map  查询条件  
	 * @return  Thing
	 */	
     public Thing selectObjectByMap(Map<String, Object> map);
     
     /**
	 * 按条件查询单个对象
	 * @param map  查询条件  
	 * @return  Thing
	 */	
     public Thing selectObjectByThing(Thing thing);
}
